[英]Java Layout Frustration
我需要有关GUI布局的指导
要将其缩小到要点:
我的下一步是实现堆栈,但我首先要使其看起来正常。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class StackPanel extends JPanel {
JPanel west, westSub1, east, south, southSub1;
JTextArea infoText, popText, pushText, peekText, resultText;
JLabel aTitle, bTitle, cTitle, Result;
JButton push, pop, peek, test;
public StackPanel() {
// Creating JPanels
setLayout(new BorderLayout());
west = new JPanel();
westSub1 = new JPanel(new GridLayout(3,2));
east = new JPanel();
south = new JPanel();
west.add(westSub1);
// Creating JLabels / JTextArea
aTitle = new JLabel("Operations");
bTitle = new JLabel("Data Structure Contents");
cTitle = new JLabel("Information");
infoText = new JTextArea("This is where commands will be displayed.");
pushText = new JTextArea("pushtxt");
popText = new JTextArea("poptxt");
peekText = new JTextArea("g");
resultText = new JTextArea("");
west.add(aTitle);
westSub1.add(pushText);
westSub1.add(popText);
westSub1.add(peekText);
westSub1.add(resultText);
east.add(bTitle);
south.add(cTitle);
south.add(infoText);
// Creating & Adding JButtons
push = new JButton("PUSH");
pop = new JButton("POP") ;
peek = new JButton("PEEK");
test = new JButton("TEST");
westSub1.add(push);
westSub1.add(pop);
westSub1.add(peek);
westSub1.add(test);
// Setting the placements of GUI objects
add(west, BorderLayout.WEST);
add(east, BorderLayout.CENTER);
add(south, BorderLayout.SOUTH);
// Declaring JPanel sizes // Width|Height
west.setPreferredSize(new Dimension(200,200));
east.setPreferredSize(new Dimension(400,100));
south.setPreferredSize(new Dimension(100,150));
// Setting black borders for JPanels
west.setBorder(BorderFactory.createLineBorder(Color.black));
east.setBorder(BorderFactory.createLineBorder(Color.black));
south.setBorder(BorderFactory.createLineBorder(Color.black));
// Setting JPanel background colours
west.setBackground(new Color(234,237,242));
east.setBackground(new Color(255,255,255));
south.setBackground(new Color(240,240,240));
}
}
这是一些让您入门的东西。 请阅读评论,如有需要,请随时澄清。 我并没有做所有需要的布局更改:我只是想演示应该做些什么,所以您明白了。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
public class StackPanel extends JPanel {
JPanel west, westSub1, east, south, southSub1;
JTextArea infoText, popText, pushText, peekText, resultText;
JLabel aTitle, bTitle, cTitle, Result;
JButton push, pop, peek, test;
public StackPanel() {
// Creating JPanels
setLayout(new BorderLayout());
// Creating JLabels / JTextArea
aTitle = new JLabel("Operations");
bTitle = new JLabel("Data Structure Contents");
west = new JPanel();
//you need to set layout manager to the panel, to lay out its components
west.setLayout(new BorderLayout());
west.setPreferredSize(new Dimension(200,200));
west.setBorder(BorderFactory.createLineBorder(Color.black));
west.setBackground(new Color(234,237,242));
add(west, BorderLayout.WEST);
west.add(aTitle, BorderLayout.NORTH);//use panel's layout manager
//you have 4 rows so GridLayout(3,2) is wrong
westSub1 = new JPanel(new GridLayout(4,2));
//for a grid layout: add components in the right order
push = new JButton("PUSH");
westSub1.add(push);
pushText = new JTextArea("pushtxt");
westSub1.add(pushText);
pop = new JButton("POP") ;
westSub1.add(pop);
popText = new JTextArea("poptxt");
westSub1.add(popText);
peek = new JButton("PEEK");
westSub1.add(peek);
peekText = new JTextArea("g");
westSub1.add(peekText);
test = new JButton("TEST");
westSub1.add(test);
resultText = new JTextArea("");
westSub1.add(resultText);
west.add(westSub1, BorderLayout.CENTER);//use panel's layout manager
east = new JPanel();
east.setPreferredSize(new Dimension(400,100));
east.setBorder(BorderFactory.createLineBorder(Color.black));
east.setBackground(new Color(255,255,255));
east.add(bTitle);
add(east, BorderLayout.CENTER);
south = new JPanel();
//you need to set layout manager to the panel, to lay out its components
south.setLayout(new BorderLayout());
south.setPreferredSize(new Dimension(100,150));
south.setBorder(BorderFactory.createLineBorder(Color.black));
south.setBackground(new Color(240,240,240));
add(south, BorderLayout.SOUTH);
cTitle = new JLabel("Information");
south.add(cTitle, BorderLayout.NORTH); //use panel's layout manager
infoText = new JTextArea("This is where commands will be displayed.");
south.add(infoText, BorderLayout.CENTER);
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new StackPanel());
frame.pack();
frame.setVisible(true);
}
}
该代码具有所需的所有导入,就像运行它的main
一样。
有关应如何发布代码的更多信息,请阅读: https : //stackoverflow.com/help/mcve
很久以前,我与Swing合作。 但是我对Swing的默认布局也有同样的麻烦。 我的提示是更改为TableLayout。 它真的很容易使用,您可以获得确切的结果。
请检查该教程: http : //www.clearthought.info/sun/products/jfc/tsc/articles/tablelayout/Simple.html
并不完美,但我会碰到这样的代码
public class StackPanel extends JPanel {
JPanel west, east, south, southSub1;
JTextArea infoText, popText, pushText, peekText, resultText;
JLabel aTitle, bTitle, cTitle, Result;
JButton push, pop, peek, test;
public StackPanel() {
// Creating JPanels
double size[][] = {{0.3, 0.7}, {TableLayout.FILL, 70}};
setLayout(new TableLayout(size));
double sizeWest[][] = {{0.5, 0.5}, {20, 20, 20, 20, 20, 20}};
setLayout(new TableLayout(size));
west = new JPanel(new TableLayout(sizeWest));
east = new JPanel();
south = new JPanel();
// Creating JLabels / JTextArea
aTitle = new JLabel("Operations");
bTitle = new JLabel("Data Structure Contents");
cTitle = new JLabel("Information");
infoText = new JTextArea("This is where commands will be displayed.");
pushText = new JTextArea("pushtxt");
popText = new JTextArea("poptxt");
peekText = new JTextArea("g");
resultText = new JTextArea("");
west.add(aTitle, "0,0,1,0");
west.add(pushText, "0,1");
west.add(popText, "0,2");
west.add(peekText, "0,3");
west.add(resultText, "0,4");
east.add(bTitle);
south.add(cTitle);
south.add(infoText);
// Creating & Adding JButtons
push = new JButton("PUSH");
pop = new JButton("POP") ;
peek = new JButton("PEEK");
test = new JButton("TEST");
west.add(push, "1,1");
west.add(pop,"1,2");
west.add(peek,"1,3");
west.add(test, "1,4");
// Setting the placements of GUI objects
add(west, "0,0");
add(east, "1,0");
add(south, "0,1, 1,1");
// Declaring JPanel sizes // Width|Height
west.setPreferredSize(new Dimension(200,200));
east.setPreferredSize(new Dimension(400,100));
south.setPreferredSize(new Dimension(100,150));
// Setting black borders for JPanels
west.setBorder(BorderFactory.createLineBorder(Color.black));
east.setBorder(BorderFactory.createLineBorder(Color.black));
south.setBorder(BorderFactory.createLineBorder(Color.black));
// Setting JPanel background colours
west.setBackground(new Color(234,237,242));
east.setBackground(new Color(255,255,255));
south.setBackground(new Color(240,240,240));
}}
希望这对您有用!
基本的Swing布局管理器要么非常初级,要么使用起来非常复杂。 因此, FormLayout或MigLayout可能是一个使用选项,它们很复杂,但使用起来并不太复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.