我怎样才能像附加的 gif 那样制作布局?
How can i make a layout like the attached gif?
我的问题是关于 Java Swing 中的布局。
我想制作如下所示的屏幕。我在 youtube 上看到了这个视频,并制作了我想要的部分的 gif。
我想要 2 个面板和一个这样的按钮:
当我单击按钮时,JPanel 将被隐藏并且 JTable 的宽度将是 100%,就像这样 html/css; (当再次点击按钮时,将显示 JPanel 等。)
我该怎么做?我应该使用哪种布局?
有不止一种方法可以做到这一点,但这里有一个使用 BorderLayout
作为主要布局的示例,并将按钮左对齐 FlowLayout
:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class LayoutDemo {
private LayoutDemo() {
JFrame frame = new JFrame("Demo");
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonHolder = new JPanel(new FlowLayout(FlowLayout.LEADING));
frame.add(buttonHolder, BorderLayout.NORTH);
JButton button = new JButton("Toggle visibility");
buttonHolder.add(button);
final JPanel left = new JPanel();
left.setPreferredSize(new Dimension(100, 200));
left.setBackground(Color.BLUE);
frame.add(left, BorderLayout.LINE_START);
JLabel table = new JLabel("This pretends to be a table", SwingConstants.CENTER);
table.setPreferredSize(new Dimension(400, 200));
frame.add(table);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
left.setVisible(!left.isVisible());
}
});
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LayoutDemo();
}
});
}
}
我使用 setPreferredSize()
给组件一些合理的默认大小,但通常它应该由布局管理器根据子组件的大小自动计算,或者在自定义组件的情况下,你应该覆盖 getPreferredSize()
return 适合组件的内容。
结果如下:
我的问题是关于 Java Swing 中的布局。
我想制作如下所示的屏幕。我在 youtube 上看到了这个视频,并制作了我想要的部分的 gif。
我想要 2 个面板和一个这样的按钮:
当我单击按钮时,JPanel 将被隐藏并且 JTable 的宽度将是 100%,就像这样 html/css; (当再次点击按钮时,将显示 JPanel 等。)
我该怎么做?我应该使用哪种布局?
有不止一种方法可以做到这一点,但这里有一个使用 BorderLayout
作为主要布局的示例,并将按钮左对齐 FlowLayout
:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class LayoutDemo {
private LayoutDemo() {
JFrame frame = new JFrame("Demo");
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel buttonHolder = new JPanel(new FlowLayout(FlowLayout.LEADING));
frame.add(buttonHolder, BorderLayout.NORTH);
JButton button = new JButton("Toggle visibility");
buttonHolder.add(button);
final JPanel left = new JPanel();
left.setPreferredSize(new Dimension(100, 200));
left.setBackground(Color.BLUE);
frame.add(left, BorderLayout.LINE_START);
JLabel table = new JLabel("This pretends to be a table", SwingConstants.CENTER);
table.setPreferredSize(new Dimension(400, 200));
frame.add(table);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
left.setVisible(!left.isVisible());
}
});
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new LayoutDemo();
}
});
}
}
我使用 setPreferredSize()
给组件一些合理的默认大小,但通常它应该由布局管理器根据子组件的大小自动计算,或者在自定义组件的情况下,你应该覆盖 getPreferredSize()
return 适合组件的内容。
结果如下: