我正在覆盖paintComponentJComponent中背景的方法,一切顺利.
但是,我想从左下角而不是左上角开始绘画.
我需要改造什么,或者什么?
我创建了一个JFrame,它包含一个JPanel.我创建了许多JLabel.我可以将JLabel添加到JPanel,并正确显示它们.但我想实现它们,因为它们按顺序显示 ; 要显示的每个JLabel之间的时间延迟.
在搜索StackOverfLow之后,我尝试了一些代码,但它没有效果!那么如何使用计时器通过设置时间延迟使组件(标签)一个接一个地显示.
我不希望修复我的代码,特别是在答案中. 只是 展示如何以延迟的方式显示任何类型的组件,每个组件在一段时间后显示.就这些.我提供了我的代码,以显示我努力解决问题.
首先,这是使用JLabel的子类:(没有问题)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
public class DLabel extends JLabel
{
Dimension size = new Dimension(70, 75);
Font font = new Font(Font.SANS_SERIF, 12, 35);
public DLabel(String t)
{
this.setPreferredSize(size);
this.setBorder(BorderFactory.createBevelBorder(1, Color.white, Color.black));
this.setVerticalAlignment(JLabel.CENTER);
this.setHorizontalAlignment(JLabel.CENTER);
this.setText(t);
this.setFont(font);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Color color1 = new Color(226, 218, 145);
Color color2 = color1.brighter(); …Run Code Online (Sandbox Code Playgroud) 我有一个JPanel,其中包含许多子组件.在更新\添加新组件到父JPanel时,我想阻止它重新绘制,这怎么能实现?
我正在玩Swing,我正在研究一个非常简单的Swing组件.我有一个继承自JComponent类的组件,它的UI继承自ComponentUI.该paint()方法如下所示:
public void paint(Graphics g, JComponent c) {
int x = c.getX();
int y = c.getY();
c.setBounds(x, y, 100, 25);
int width = c.getWidth();
int height = c.getHeight();
Rectangle r = g.getClipBounds();
g.fillRect(0, 0, 10, 10);
g.drawString("Baf!", 3, 3);
}
Run Code Online (Sandbox Code Playgroud)
但是完全不可能得到另一个r.height超过1的值.组件的宽度是给定的,但高度总共只有一点.有没有其他人经历过类似的组件?不幸的是,没有任何简单的教程.所有教程都难以理解(或过时).
看起来,布局管理器总是将此组件的大小调整为1个高度(无论最小值).
我有一个JButton使用setToolTipText(String str),我在工具提示中有几行写作需要通过换行符分隔.在我想要换行之前,我尝试在每行文本的末尾连接+"/ n",但它没有做任何事情.JToolTiptext没有带有a的构造函数,JTextArea我看不到任何JTextArea允许它转换为a的内容String.有人有主意吗?另外,如何让a JToolTip持续时间超过默认的3秒?感谢您的时间.
我正在创建一个扩展的类JPanel。我在该面板中使用添加了几个文本区域和下拉列表GridBagConstraints。现在我想使用键盘的 Tab 键将一个字段移动到另一个字段。我还想提一下,以前 Tab 键可以扩展文本区域。
这就是为什么我写下这句话:restuarantLocation.setTabSize(0);现在它停止了扩张。
但我不知道如何让 tab 键起作用?请帮忙。
这是我实际想要放在面板上的内容:
第一个逻辑块:
单选按钮1文本字段图标按钮
单选按钮2文本字段图标按钮
复选框
第二个逻辑块:
标签微调器
按键
我的第一个决定是制作垂直框布局并为每个逻辑块放置两个水平框布局.但问题在于这些块,选择哪种布局来描述这种结构?我不喜欢GridBagLayout - 它非常复杂且难以理解,特别是当代码不是你的时候.目前我看到可以使用Flow Layout和Grid Layout.但是,例如,网格布局将按钮拉伸到单元格的宽度,如果按钮只有图标,那么它看起来很奇怪.
希望你能告诉我一些事情.
我正在尝试使用两个简单的按钮创建一个JPanel.第一个按钮RoachComponent使面板中的组件数量加倍.第二个按钮将清除所有蟑螂.
现在,我的大部分计划都在运作,但是存在一个相当严重的问题.每次点击只添加一个蟑螂,即使它应该添加几千只蟑螂.我已经测试了所有我能想到的东西,但它仍然在逃避我.即使我手动添加两个蟑螂,也只显示一个.这是我的main函数中的代码.我99%确定代码的其他部分都是正确的,尽管如果需要我可以发布它.
final JFrame frame = new JFrame();
final JPanel panel = new JPanel();
// Button to create a new roach
JButton button = new JButton("New Roach");
final RoachPopulation roachPopulation = new RoachPopulation(2);
// The label for displaying the results
final JLabel label = new JLabel("Population: " + roachPopulation.getPopulation());
// ActionListener class
class doubleListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("------------------");
for (int i = 0; i < roachPopulation.getPopulation(); i++) {
RoachComponent newRoach = …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,仅JFrame包含JLabel,位于中心BorderLayout.
package test.swing;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Try_JLabel_01 {
public static void main(String[] arg) {
JFrame frame = new JFrame() {
JLabel label = new JLabel("label");
{
setLayout(new BorderLayout());
add(label, BorderLayout.CENTER);
}
};
frame.pack();
//frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果运行,该程序将显示窗口,该窗口完全符合控件大小.
同时,如果我定义自定义控件,则默认窗口大小为零:
public class Try_JLabel_02 {
public static void main(String[] arg) {
JFrame frame = new JFrame() {
//JLabel label = new JLabel("label");
JComponent label = new JComponent() {
@Override
protected …Run Code Online (Sandbox Code Playgroud) JPanel panel = new JPanel();
JButton h = new JButton("HELLO");
for (int i = 0; i < 15; i++) {
panel.add(h);
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,面板只显示按钮一次.