java jframe 和 layout_java – 使用BorderLayout将图形添加到JFrame中

我正在尝试做一个简单的作业,在那里我显示一行文字,显示门对象是否打开.在其下面,我直观地表示它(使用drawRect)方法.在底部我有两个按钮,可以打开或关闭门,从而改变文本和矩形.

编辑:现在可以编译的代码列表:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Test {

public static void main(String[] args) {

// Creates new JFrame called frame, with title "Door"

// (displayed at top of screen).

JFrame frame = new JFrame ("Door");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

TempDoorPanel panel = new TempDoorPanel();

frame.add(panel);

frame.pack();

frame.setVisible(true);

}

}

class Door {

private String state;

private String message;

Door (String state) {

this.state = state;

message = "The door is currently closed.";

}

public boolean isOpen() {

return state.equals ("open");

}

public boolean isClosed() {

return state.equals ("closed");

}

public void setState(String state) {

this.state = state;

}

public String getMessage() {

return message;

}

public void open() {

if (state.equals("open")) {

message = "The door is already open.";

}

else {

state = "open";

message = "The door has been opened.";

}

}

public void drawOpenDoor (Graphics page) {

page.drawRect(100, 100, 100, 100);

}

}

class TempDoorPanel extends JPanel {

private Door door;

private JTextField currentStateOfDoor;

private JButton openDoor;

public TempDoorPanel() {

super.setLayout(new BorderLayout());

door = new Door("closed");

super.setBackground(Color.blue);

super.setPreferredSize(new Dimension (360, 400));

currentStateOfDoor = new JTextField(14);

currentStateOfDoor.setText(door.getMessage());

super.add(currentStateOfDoor, BorderLayout.NORTH);

openDoor = new JButton("Open Door");

class openDoorListener implements ActionListener {

public void actionPerformed (ActionEvent event) {

door.open();

repaintText();

}

}

openDoorListener openlistener = new openDoorListener();

openDoor.addActionListener(openlistener);

JPanel holder = new JPanel();

holder.add(openDoor);

super.add(holder, BorderLayout.SOUTH);

}

private void repaintText() {

currentStateOfDoor.setText(door.getMessage());

// These methods are from Door class.

}

public void paintComponent (Graphics page) {

super.paintComponent(page);

if (door.isOpen())

door.drawOpenDoor(page);

// isOpen is a boolean method from Door class.

}

}

什么有效:

>按钮出现在屏幕上的正确位置,在BorderLayout.SOUTH,一个接一个.

> JTextField出现在BorderLayout.NORTH的正确位置

>最后,蓝色区域出现在屏幕中央的正确位置.

我正在努力解决的问题:

>我不知道如何在蓝色区域的中间正确显示矩形.我试过改变矩形的坐标和大小,这根本不会改变它的大小.我可以把它作为drawRect(100,100,100,100)并且它什么都不改变.

>我也知道矩形当前隐藏在JTextField的左上角后面,但我无法弄清楚如何将它移动到BorderLayout中.

问题:

>如何在BorderLayout中放置一个矩形?

>在这样的布局中,如何调整通过drawrect()绘制的矩形的大小?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Swing是一种用于构建图形界面的Java库。Layout Manager是用于管理Swing组件的布局的工具。BorderLayout是Swing最常用的布局之一。 BorderLayout将容器分为五个区域:北方(North)、南方(South)、东方(East)、西方(West)和心(Center)。每个区域只能包含一个组件,如果多个组件添加到同一个区域,则只显示最后一个添加的组件。 使用BorderLayout布局管理器,我们可以通过以下方式将组件添加到容器: 1. 使用容器的add(Component, BorderLayout.CENTER)方法将一个组件添加心区域。 2. 使用容器的add(Component, BorderLayout.NORTH)方法将一个组件添加到北方。 3. 使用容器的add(Component, BorderLayout.SOUTH)方法将一个组件添加到南方。 4. 使用容器的add(Component, BorderLayout.EAST)方法将一个组件添加到东方。 5. 使用容器的add(Component, BorderLayout.WEST)方法将一个组件添加到西方。 例如,下面的代码片段展示了如何使用BorderLayout布局管理器创建一个简单的应用程序窗口: ```java import javax.swing.*; import java.awt.*; public class BorderLayoutExample { public static void main(String[] args) { JFrame frame = new JFrame("BorderLayout Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); JButton button1 = new JButton("North"); frame.add(button1, BorderLayout.NORTH); JButton button2 = new JButton("South"); frame.add(button2, BorderLayout.SOUTH); JButton button3 = new JButton("East"); frame.add(button3, BorderLayout.EAST); JButton button4 = new JButton("West"); frame.add(button4, BorderLayout.WEST); JButton button5 = new JButton("Center"); frame.add(button5, BorderLayout.CENTER); frame.setSize(300, 200); frame.setVisible(true); } } ``` 上述代码创建了一个有五个按钮的窗口,每个按钮位于窗口的不同区域。运行该代码将显示一个具有BorderLayout布局的窗口,其每个按钮位于指定的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值