【发布时间】:2015-01-25 19:32:20
【问题描述】:
我的 JText 区域不工作。您将看到是否运行此代码。即使我已经设置了一个明确的位置,textArea 也会不断地去不同的地方。 textArea 的代码是第 57 行。
我真正需要的是让 testArea 保持一个固定的位置,这在第 57 行进行了解释。
注意:'pain' 是一个包含 textArea 的 JPanel
public Graphics g;
public void paint(Graphics g) {
Graphics2D projectFinder = (Graphics2D) g;
projectFinder.setColor(Color.GRAY);
projectFinder.fillRect(0, 0, 1000, 50);
projectFinder.setStroke(new BasicStroke(100));
Graphics2D OutPut = (Graphics2D) g;
OutPut.setColor(Color.LIGHT_GRAY);
OutPut.fillRect(553, 60, 535, 670);
OutPut.drawString("Project Input (Your Code)", 30, 90);
Graphics2D console = (Graphics2D) g;
console.setColor(Color.WHITE);
console.fillRect(563, 620, 515, 100);
console.setColor(Color.BLACK);
console.drawString("Console.ChemLOG", 570, 640);
}
public static void main(String[] args) {
JPanel pnlButton = new JPanel();
pnlButton.setBounds(800, 100, 100, 100);
JButton button = new JButton("Add Project");
button.setBounds(1000, 0, 100, 50);
JFrame frame = new JFrame("GenoTECH IDE 1.0.0");
frame.add(new MainScreen());
frame.setSize(1100, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(button);
button.addActionListener(new NewProject());
// TextBox
JPanel pain = new JPanel();
JTextArea area = new JTextArea();
area.setSize(535, 670);
area.setLocation(0, 0);
pain.setLocation(10, 60);
pain.setSize(area.getSize());
pain.add(area);
frame.add(pain);
}
// add project button
static class NewProject implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton buttonOK = new JButton("Ok");
buttonOK.setBounds(0, 233, 150, 45);
JButton buttonCn = new JButton("Cancel");
buttonCn.setBounds(150, 233, 150, 45);
JFrame frame2 = new JFrame("New Project");
frame2.setSize(300, 300);
frame2.setVisible(true);
frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame2.add(buttonOK);
frame2.add(buttonCn);
buttonCn.addActionListener(new buttonCN());
}
static class buttonCN implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}
}
好的,现在更新代码,我已经让 JTextArea 正常工作,但由于某种原因没有调用 2D 图形。我还在使用一些 Java 布局格式进行另一种布局。
新代码:
private static final long serialVersionUID = 1L;
public Graphics g;
public void paint(Graphics g) {
Graphics2D projectFinder = (Graphics2D) g;
projectFinder.setColor(Color.GRAY);
projectFinder.fillRect(0, 0, 1000, 50);
projectFinder.setStroke(new BasicStroke(100));
Graphics2D OutPut = (Graphics2D) g;
OutPut.setColor(Color.LIGHT_GRAY);
OutPut.fillRect(553, 60, 535, 670);
OutPut.drawString("Project Input (Your Code)", 30, 90);
Graphics2D console = (Graphics2D) g;
console.setColor(Color.WHITE);
console.fillRect(563, 620, 515, 100);
console.setColor(Color.BLACK);
console.drawString("Console.ChemLOG", 570, 640);
}
public static void main(String[] args) {
JButton button = new JButton("Add Project");
button.setBounds(1000, 0, 100, 50);
//button.setSize(5,5);
//button.setLocation(1,1);
JFrame frame = new JFrame("GenoTECH IDE 1.0.0");
frame.setLayout(null);
frame.add(new MainScreen());
frame.setSize(1100, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(button);
button.addActionListener(new NewProject());
// Thing to Change
JTextArea area = new JTextArea();
area.setSize(535, 670);
area.setLocation(10, 60);
frame.add(area);
}
// add project button
static class NewProject implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton buttonOK = new JButton("Ok");
buttonOK.setBounds(0, 233, 150, 45);
JButton buttonCn = new JButton("Cancel");
buttonCn.setBounds(150, 233, 150, 45);
JFrame frame2 = new JFrame("New Project");
frame2.setSize(300, 300);
frame2.setVisible(true);
frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame2.add(buttonOK);
frame2.add(buttonCn);
}
}
【问题讨论】:
-
每次运行它时它是否出现在不同的位置(即,它是否在您运行程序时立即发生)或者是否必须发生某些事情才能发生这种行为?
-
使用布局管理器而不是硬编码边界和尺寸。 docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
-
虽然空布局和
setBounds()对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整您的组件大小,它们是增强或维护的皇家女巫,放置在滚动窗格中时它们完全失败,在与原始不同的所有平台或屏幕分辨率上查看时它们看起来很糟糕. -
"Swing 程序应该覆盖
paintComponent(),而不是覆盖paint()。"—Painting in AWT and Swing: The Paint Methods。 -
但是解决方案已经给你了:不要设置边界,不要使用空布局和绝对定位。而是以聪明的方式使用布局管理器,如果您遵循这些建议,您的代码将富有成效,您将获得成功。
标签: java swing layout-manager null-layout-manager