我想在我的程序中按下按钮时,将JFrame动画化为半角.我认为最简单的方法是将JFrame的当前边界放入计时器,并在计时器运行时将边界减1,但是当我在netbeans IDE中声明一个新的计时器时,它看起来像这样.
Timer t = new Timer(5,new ActionListener() {
public void actionPerformed(ActionEvent e) {
//inside this I want to get my Jframe's bounds like this
// int width = this.getWidth();---------here,"this" means the Jframe
}
}
});
Run Code Online (Sandbox Code Playgroud)
但问题是在这里"这个"并没有引用JFrame.And我甚至无法创建我的JFrame的新对象.因为它会给我另一个窗口.任何人都可以帮我解决这个问题吗?
我相信我在向你寻求帮助之前已完成了我的研究,但我可能忽略了一些东西.
我正在使用Nimbus laf编写一个java UI.我希望在状态改变时更改JSpinner的背景颜色,即,当按下向上或向下按钮时,jspinner中文本字段的背景颜色会改变颜色以表示该值已被更改.
我知道这可以使用OTHER lookandfeels但使用Nimbus不那么容易,例如:
((JSpinner.NumberEditor)jSpinner1.getEditor()).getTextField().setBackground(color.yellow);
我还研究过实际更改UI管理器的颜色主题,但我只想在操作发生时更改颜色,而不是仅在默认情况下改变整体颜色. 在这里或这里
这有可能吗?我从哪里开始?
如果做不到这一点,我希望只是改变一个按钮的颜色:
jButton.setBackground(Color.yellow);
这很容易,但由于默认颜色是绘制的渐变,我该如何将其更改为?
真的希望那里的人知道或可以提供帮助.
非常感谢提前!
我有以下代码:
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
public final class ChineseCharacterDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
Locale locale = new Locale("zh", "CN");
System.out.println(locale.getDisplayLanguage(Locale.SIMPLIFIED_CHINESE));
}
}
Run Code Online (Sandbox Code Playgroud)
甚至在将Eclipse控制台的字符编码设置为UTF-8后,我得到的是框,而不是以下内容:
??
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
将Eclipse控制台字体更改为能够呈现中文字符的内容后,我得到以下不正确的显示:

但是,当我在这里复制/粘贴文本时,它会正确呈现简体中文文本.再一次,这里发生了什么?实际上,如果你在控制台中查看渲染文本,它是正确的字符,但它们就在他们身边!
所以,事实证明我需要做以下事情:
我想创建一个带圆角的自定义边框.
代码 -
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.border.AbstractBorder;
class JRoundedCornerBorder extends AbstractBorder
{
private static final long serialVersionUID = 7644739936531926341L;
private static final int THICKNESS = 5;
JRoundedCornerBorder()
{
super();
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
{
Graphics2D g2 = (Graphics2D)g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if(c.hasFocus())
{
g2.setColor(Color.BLUE);
}
else
{
g2.setColor(Color.BLACK);
} …Run Code Online (Sandbox Code Playgroud) 如果您运行以下代码,
public class Foo{
public static void main(String[] args){
int id = new Bar().getId(); // throws unexpected NullPointerException
}
private static class Bar{
private final Integer id;
public Bar(){
this(null);
}
public Bar(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您将获得以下堆栈跟踪,
Exception in thread "main" java.lang.NullPointerException
at Foo.main(Foo.java:3)
Run Code Online (Sandbox Code Playgroud)
为什么没有编译器警告或任何东西?恕我直言,这是一个非常讨厌的微妙与拆箱,或者也许我只是天真.
添加@Javier提供的答案,如果您使用的是Eclipse,则需要执行以下操作来启用此功能:
我在JList中遇到NullPointerException,但异常的来源似乎是Swing事件处理代码.JList有一个键监听器,当按下Delete键时,它将删除所选项.仅在列表中的第二个和所有后续删除上抛出异常.关于如何修复它的任何想法?
重现问题的示例代码和生成的异常包括在下面:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JList;
public class Sample {
public static void main(String[] args) {
final JFrame frame = new JFrame();
final Vector<String> list = new Vector<String>();
for (int i = 0; i < 5; ++i) {
list.add("String " + i);
}
final JList listView = new JList(list);
listView.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DELETE) {
list.remove(listView.getSelectedIndex());
listView.updateUI();
}
}
@Override
public void keyReleased(KeyEvent e) { } …Run Code Online (Sandbox Code Playgroud) 我的问题是我的JTextField -setColumns(int)
"field1.setColumns(5);"
......不起作用.我猜它是一个布局管理器问题.但是,我正在练习练习册.我所知道的唯一布局是flowLayout,borderLayout和gridlayout.
简而言之,只要"field2"触发ActionEvent(通过按回车键),"field1"就应该改变大小.
我在"actionPerformed"中放置了一个"System.out.println("ActionEvent detect")来证明一个actionevent正在被触发,所以这不是问题.我甚至打印了"field1.getColumn"并且它显示正确的更改值5,但是...它不仅不会在运行时明显改变大小.
我不希望有人能够解释这个问题.解决这个问题不会帮助我学习,这是解决这些书籍练习的全部目的.
重要的是,我在netbeans编码.在此先感谢您的帮助.
public class Exercise13_11 extends JFrame implements ActionListener
{
private JTextField textField1, textField2;
private JLabel label1, label2;
private JRadioButton rButton1, rButton2, rButton3;
public static void main(String[] args)
{
JFrame frame = new Exercise13_11();
frame.setTitle("Exercise 13.11");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450, 200);
frame.setVisible(true);
}
public Exercise13_11()
{
// North Panel aligned and filled.
JPanel northPanel = new JPanel();
northPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
northPanel.add(label1 = new JLabel("Text Field"));
northPanel.add(textField1 = new JTextField(20));
northPanel.setToolTipText("Demonstrate JTextField");
getContentPane().add(northPanel, BorderLayout.CENTER);
// South panel …Run Code Online (Sandbox Code Playgroud) 我有一个带有物体的arraylist和一个正在运行的Gui.我正在寻找一种方法来弹出一个小框架或框或类似于显示arraylist中的对象的方法.用户现在应该能够选择一个或多个随后返回的项目.
我已经有了optionpane,但我可以选择一个对象
Object[] possibilities = lr.declarationList.toArray();
String s = (String)JOptionPane.showInputDialog(
gui.getFrame(),
"Choose Target Nodes",
"Customized Dialog",
JOptionPane.PLAIN_MESSAGE,
null,
possibilities,
null);
Run Code Online (Sandbox Code Playgroud)
也许一个弹出列表会有所帮助.
我有一个JTextField.当用户输入a或者j,我希望文本字段中的文本是大写的(例如输入"ab",输出"AB").如果第一个字母不是以下之一,
a,t,j,q,k,2,3,...,9 我不希望文本字段显示任何内容.
而这就是我所拥有的,
public class Gui {
JTextField tf;
public Gui(){
tf = new JTextField();
tf.addKeyListener(new KeyListener(){
public void keyTyped(KeyEvent e) {
}
/** Handle the key-pressed event from the text field. */
public void keyPressed(KeyEvent e) {
}
/** Handle the key-released event from the text field. */
public void keyReleased(KeyEvent e) {
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下,
GridLayout layout = new GridLayout(4, 0);
Run Code Online (Sandbox Code Playgroud)
如果我有5项目,这将创建2列,其中第一个包含3行,第二个包含2行.这不是我想要的,也不是我所期望的.我希望第一列包含4行,第二列包含1行.
为什么这个布局管理器不符合每列我想要的行数?或者更好的是,我如何让这个布局经理尊重这个?
java ×10
swing ×8
eclipse ×2
jtextfield ×2
awt ×1
bounds ×1
cjk ×1
graphics ×1
grid-layout ×1
java-2d ×1
jframe ×1
jlist ×1
joptionpane ×1
jspinner ×1
keylistener ×1
nimbus ×1
stroke ×1
timer ×1
unboxing ×1