Swing 如何使用GridBagLayout修改此视图
如果您能帮助我修改此界面,我将不胜感激。我刚刚开始学习GridBagLayout,我想知道如何使用GridBagLayout()实现绘制的接口 请在附件中找到一个工作示例Swing 如何使用GridBagLayout修改此视图,swing,jbutton,jlabel,gridbaglayout,jspinner,Swing,Jbutton,Jlabel,Gridbaglayout,Jspinner,如果您能帮助我修改此界面,我将不胜感激。我刚刚开始学习GridBagLayout,我想知道如何使用GridBagLayout()实现绘制的接口 请在附件中找到一个工作示例 import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JButton; import javax.swin
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
public class Sample extends JPanel
{
private JLabel labelFileName = new JLabel("Playing File:");
private JLabel labelTimeCounter = new JLabel("00:00:00");
private JLabel labelDuration = new JLabel("00:00:00");
private JButton buttonOpen = new JButton(" Open ");
private JButton buttonPlay = new JButton(" Play ");
private JButton buttonPause = new JButton(" Pause ");
private JButton buttonRewind = new JButton(" Rewind ");
private JButton buttonSave = new JButton(" Save ");
private JSlider sliderTime = new JSlider();
GridBagConstraints constraints = new GridBagConstraints();
public Sample()
{
setLayout(new GridBagLayout());
constraints.insets = new Insets(5, 5, 5, 5);
sliderTime.setValue(0);
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 5;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(labelFileName, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
add(labelTimeCounter, constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 3;
add(sliderTime, constraints);
constraints.gridx = 4;
constraints.gridy = 1;
constraints.gridwidth = 1;
add(labelDuration, constraints);
JPanel panelButtons = new JPanel(new FlowLayout(FlowLayout.LEFT, 25, 5));
panelButtons.add(buttonOpen);
panelButtons.add(buttonPlay);
panelButtons.add(buttonPause);
panelButtons.add(buttonRewind);
panelButtons.add(buttonSave);
constraints.gridx = 0;
constraints.gridy = 2;
add(panelButtons, constraints);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
runApp();
}
});
}
public static void runApp()
{
JFrame frame = new JFrame("Frame");
frame.setVisible(true);
frame.setSize(800, 200);
frame.add( new Sample());
frame.setDefaultCloseOperation
}
}
谢谢我强烈建议使用一列三行网格
- 顶行可以是设置为flowlayout的面板,也可以直接插入标签。由您设置标签的大小。布局管理器不能为您这样做
- 中间一行将是一个边界布局,其中微调器设置为中心,两个标签放置在东和西
- 最下面一行应该是带有流程布局的面板集。要使按钮在图表中保持良好的间距,只能使用flowlayout
我唯一担心的是滑块面板可能会在垂直方向上调整大小。在这种情况下,您可能希望放弃GridBaglayout,只在顶部有一个borderlayout,其中最上面的一行是中心,最下面的两行被打包到一个位于南部的面板中。您最好使用一些可以调试布局的工具。除此之外:
slidetime
的宽度应为3,而不是2<代码>面板按钮的宽度应为5,而不是1。另外,您可能希望将第二列的权重X设置为正值。不要忘记frame.setDefaultCloseOperation
。无法忍受人们在mcve中忘记这一点。如果我忘记添加它,很多时候我在测试时会得到一百万个后台程序:-)@peeskillet edited:)@Ordous constraints.gridwidth=5对于panelButtons解决了80%的问题,这个答案看起来不错,但是,我想用GridBagLayout()来做界面。我知道如何使用其他布局来修复它,但我的问题的目的是学习更多的GridBagLayout。当然,您仍在部分使用GridBagLayout。您的图表实际上不适合100%使用GridBagLayout。你也许能做到,但那将是相当困难的。按钮和滑块与任何列都不匹配,因此在您的情况下,我只能看到3x1网格。非常感谢,这很有帮助
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
public class Sample extends JPanel
{
private JLabel labelFileName = new JLabel("Playing File:");
private JLabel labelTimeCounter = new JLabel("00:00:00");
private JLabel labelDuration = new JLabel("00:00:00");
private JButton buttonOpen = new JButton(" Open ");
private JButton buttonPlay = new JButton(" Play ");
private JButton buttonPause = new JButton(" Pause ");
private JButton buttonRewind = new JButton(" Rewind ");
private JButton buttonSave = new JButton(" Save ");
private JSlider sliderTime = new JSlider();
GridBagConstraints constraints = new GridBagConstraints();
public Sample()
{
setLayout(new GridBagLayout());
constraints.insets = new Insets(5, 5, 5, 5);
sliderTime.setValue(0);
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 5;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(labelFileName, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 1;
add(labelTimeCounter, constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 3;
add(sliderTime, constraints);
constraints.gridx = 4;
constraints.gridy = 1;
constraints.gridwidth = 1;
add(labelDuration, constraints);
JPanel panelButtons = new JPanel(new FlowLayout(FlowLayout.LEFT, 25, 5));
panelButtons.add(buttonOpen);
panelButtons.add(buttonPlay);
panelButtons.add(buttonPause);
panelButtons.add(buttonRewind);
panelButtons.add(buttonSave);
constraints.gridx = 0;
constraints.gridy = 2;
add(panelButtons, constraints);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
runApp();
}
});
}
public static void runApp()
{
JFrame frame = new JFrame("Frame");
frame.setVisible(true);
frame.setSize(800, 200);
frame.add( new Sample());
frame.setDefaultCloseOperation
}