我正在学习JPanel和GridLayout,这段代码将生成一个带有6个按钮的简单JPanel
package testing;
import java.io.*;
import java.util.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
public class Testing
{
public static class GridPanel extends JPanel
{
public GridPanel()
{
setLayout(new GridLayout(2,3));
setBackground(Color.GREEN);
this.setPreferredSize(new Dimension(500,500));
JButton b1 = new JButton ("Button 1");
JButton b2 = new JButton ("Button 2");
JButton b3 = new JButton ("Button 3");
JButton b4 = new JButton ("Button 4");
JButton b5 = new JButton ("Button 5");
JButton b6 = new JButton ("Button 6");
add(b1);
add(b2); …
Run Code Online (Sandbox Code Playgroud) 我把我的按钮放在带有GridLayout的JPane中.然后我将JPanel放入另一个带有BoxLayout.Y_AXIS的JPanel中.我希望GridLayout中的按钮是方形的.我使用tmp.setSize(30,30)并且它不起作用.我也尝试使用,new GridLayout(X, Y, 4, 4)
但我无法弄清楚X和Y是什么.那么,做这些事情的正确方法是什么?
添加:
我仍然无法解决问题.这是我想要做的代码:
import javax.swing.*;
import java.awt.*;
public class PanelModel {
public static void main(String[] args) {
JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JPanel firstPanel = new JPanel();
firstPanel.setLayout(new GridLayout(4, 4));
JButton btn;
for (int i=1; i<=4; i++) {
for (int j=1; j<=4; j++) {
btn = new JButton();
btn.setPreferredSize(new Dimension(100, 100));
firstPanel.add(btn);
}
}
JPanel secondPanel = new JPanel();
secondPanel.setLayout(new GridLayout(5, 13));
for (int …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我的一个布局JDialog
以适应我正在移植到Java的程序的特定外观,我之前使用过几个LayoutManagers并取得了巨大的成功但由于某种原因我似乎无法得到这个工作在一起.我的目标是让内部的右侧(东侧)JDialog
按照自上而下的顺序包含"查找下一个"和"取消"按钮,然后在下面的任何额外空间中,以便两个按钮始终位于顶部JDialog
,出于某种原因BoxLayout
不断忽视任何改变的尝试(这是我失去的地方)的宽度JButton
.代码如下.
JButton findNext = new JButton("Find Next");
JButton cancel = new JButton("Cancel");
cancel.setPreferredSize(new Dimension((int)findNext.getPreferredSize().getWidth(),
(int)cancel.getPreferredSize().getHeight()));
JPanel example = new JPanel();
example.setLayout(new BoxLayout(example, BoxLayout.Y_AXIS));
example.add(findNext);
example.add(cancel);
example.add(Box.createGlue());
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,cancel
始终保持它的正常尺寸.我已经尝试setMinimumSize()
并setMaximumSize()
使用相同的参数setPreferredSize
,没有运气.我甚至尝试cancel.setPreferredSize(new Dimension(500, 500));
了按钮高度是唯一调整的东西,它仍然保留了它给出的默认宽度.
要清除任何问题,这就是它的样子(现在我已经完成了),你会看到"查找下一个"和"取消"按钮的大小不同.
在Java中,当由于空间不足而无法显示JLabel的文本时,文本被截断并且最后添加"...".
如何轻松找出当前JLabel是显示全文还是截断?
编辑:
我看到有一种方法可以通过使用找出文本的大小FontMetrics
.但是,此解决方案并未完全回答这个问题.在JLabel的文本包含HTML装饰的metrics.stringWidth()
情况下,还将计算HTML标签的宽度.因此,可能会发生metrics.stringWidth()
比JLabel的宽度更大的结果,但仍然可以正确显示文本.
有没有办法知道在显示文本时JLabel本身做出了什么决定.它是否决定截断文本.
我试图在一个JPanel中垂直对齐(居中)两个JLabel.
JPanel panel = new JPanel();
panel.setPreferredSize(size);
JLabel label1 = new JLabel(icon);
JLabel label2 = new JLabel("text");
panel.add(label1);
panel.add(label2);
Run Code Online (Sandbox Code Playgroud)
我尝试过使用setAligmentY()但没有成功.两个标签始终显示在JPanel的顶部.
UPD:标签应该像使用FlowLayout一样位于彼此旁边,但是在JPanel的中间.
标题解释了这个问题.我怎么能轻松做到这一点?
似乎不可能修复Graphics2D缺少的代码,我必须设置动画的修复大小,否则一些开始外面的矩形490 x 490冻结或在屏幕上摇晃
我的SSCCE
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Random;
import java.util.Vector;
import java.util.regex.Pattern;
import javax.swing.*;
import javax.swing.table.*;
public class OneTwoThree implements Runnable {
private String testS;
private JFrame frame = new JFrame("frameTitle");
private JScrollPane tblS = new JScrollPane();
private JTable tbl;
private Vector<String> rOrH;
private long t1 = 0L;
private long t2 = 0L;
private AlphaChars aChars = new AlphaChars();
private GradientViewPortOriginal tableViewPort;
private JViewport viewport = new JViewport();
private Random random …
Run Code Online (Sandbox Code Playgroud) 我在这里读了一些帖子,我开始为什么有些人这样做
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
Run Code Online (Sandbox Code Playgroud)
代替
setPreferredSize(new Dimension(500, 500));
Run Code Online (Sandbox Code Playgroud)
不是第二个更好,因为它只创建一个Dimension
对象,而第一个可能创建几个(即使它没有那么多浪费的内存)?还是我错了?有什么不同吗?
不确定我的需要是否可行.我有一个包含一些内部元素的容器(JPanel).我想知道是否有可能强制内部元素适应容器的大小.我需要它们完全可见,即调整大小以适应Panel的大小,而不是剪切内部元素的某些部分.
滚动不是一种选择.
这是否可以通过使用布局或其他东西?
编辑:重要的澄清:问题是我无法访问内部元素也不能访问它们的属性所以我想说一个Layoutmanager能够调整子元素的大小以适应它的大小.我测试了BorderLayout和GridBagLayout,但结果始终相同,内部元素被删除.
我正在尝试创建一个java桌面应用程序,我正在使用多个JLabel
我想设置修复高度和宽度JLabel
.我怎样才能做到这一点?
这是我的代码
public class Second extends JFrame
{
JPanel panel1,panel2;
JLabel label=new JLabel();
ArrayList<JLabel> lbllist = new ArrayList<>();
public Second()
{
super("Simple Timer");
{
getContentPane().setBackground(new java.awt.Color(255,255,255));
}
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container c = getContentPane();
c.setLayout( new FlowLayout());
setUndecorated(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screenSize.width, screenSize.height);
panel2=new JPanel();
panel2.setBounds(360, 180, 360, 1020);
panel2.setBackground(new java.awt.Color(255,153,51));
c.add(panel2);
JPanel panel3 = createPanel();
panel1.setLayout(new GridBagLayout());
panel1.add(panel3);
JPanel panel4 = createPanel();
panel2.setLayout(new GridBagLayout());
// jPanel2.setLayout(null);
panel2.add(panel4);
setLayout(null);
}
private JPanel createPanel() {
JPanel panel = …
Run Code Online (Sandbox Code Playgroud)