相关疑难解决方法(0)

9
推荐指数
1
解决办法
9209
查看次数

JTabbedPane自定义选项卡外观

我想在JTabbedPane中自定义选项卡的外观.
我想从最简单和最简洁的行为开始:没有边界,纯色.
问题是仍然存在不稳定性:标签略微重叠.

在此输入图像描述

您会看到,自从选择了第二个选项卡后,它就会"脱颖而出".这是通过略微的边缘重叠来实现的.是否有(非常棘手的)方法来禁用此行为?

简单,可测试(只修复导入)代码:

public class TabbedPane_LookStudy extends JFrame{

public static void main(String [] args) throws UnsupportedLookAndFeelException {
    UIManager.setLookAndFeel(new NimbusLookAndFeel());
    new TabbedPane_LookStudy().setVisible(true);
}

public TabbedPane_LookStudy() {
    JTabbedPane tp = new JTabbedPane();
    tp.setUI(new MyTabbedPaneUI());
    add(tp);

    tp.addTab("first",new JPanel());
    tp.addTab("second", new JPanel());
    tp.addTab("third", new JPanel());

    setPreferredSize(new Dimension(180,100));
    pack();
}

public static class MyTabbedPaneUI extends javax.swing.plaf.basic.BasicTabbedPaneUI {

    @Override
    protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, 
               int tabIndex, Rectangle iconRect, Rectangle textRect) {
        Color savedColor = g.getColor();
        g.setColor(Color.PINK);
        g.fillRect(rects[tabIndex].x, rects[tabIndex].y, 
               rects[tabIndex].width, rects[tabIndex].height);
        g.setColor(Color.BLUE); …
Run Code Online (Sandbox Code Playgroud)

java swing jtabbedpane

8
推荐指数
1
解决办法
2万
查看次数

绘制JSlider的滑块图标

想要重新标记标记或拇指JSlider而不是标准灰色.我怎样才能做到这一点?

java swing look-and-feel jslider

7
推荐指数
2
解决办法
8846
查看次数

如何自定义JSplitPane分隔线并保持单触箭头功能?

所以,我的问题归结为这个...默认的分隔符有点难看,而且我想为它添加一个标签(在I-want-text-on-it意义上,而不是在"添加JLabel"它的布局"感觉".我看到您可以更改拆分窗格分隔符上的边框,但是当我这样做时,它会删除我想要保留的单触箭头.

有关我如何兼顾两者的任何想法?

这是一个SSCCE,它演示了默认行为以及更改分隔符边框时发生的情况:

import javax.swing.*;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SplitPaneFun {
public static void main(String[] args) {

        //Here I'm messing around with the divider look. This seems to remove the one-touch arrows.  These blocked-out lines illustrate
        // what I'm doing to modify the divider's border.  Does this look right?:
    //------------------------------------------------------------------------------------------------
    JSplitPane withCustomDivider = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel());
    BasicSplitPaneDivider divider = ( (BasicSplitPaneUI) withCustomDivider.getUI()).getDivider();
    withCustomDivider.setOneTouchExpandable(true);
    divider.setDividerSize(15);
    divider.setBorder(BorderFactory.createTitledBorder(divider.getBorder(), "Custom border title -- …
Run Code Online (Sandbox Code Playgroud)

java swing jsplitpane

6
推荐指数
1
解决办法
5218
查看次数

在Java 8中设置装饰JFrame的不透明度

我想知道如何JFrame最新版本的Java中获得透明.

目前,您只能使用

<JFrame>.setOpacity();
Run Code Online (Sandbox Code Playgroud)

如果框架没有装饰.

我没有使用未装饰的框架,所以我想知道如何绕过这个限制并设置框架的不透明度,0.5f同时仍然保持标题栏,调整大小选项等.

我在这里阅读了文档:http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html.该代码仅适用于Java 6,不再运行.正如我所说,错误是:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
    at java.awt.Frame.setOpacity(Frame.java:960)
    at TranslucentWindowDemo$1.run(TranslucentWindowDemo.java:53)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    ...
Run Code Online (Sandbox Code Playgroud)

我也尝试(setBackground : Color)使用Color自定义Alpha值(new Color(int, int, int, Alpha))设置背景但它会抛出完全相同的错误.设置JPanel这种方式的跨性别是行不通的,因为它仍然存在JFrame,这是不透明的.

我找不到正确解决此问题的Stack Overflow上的其他答案.事实上,一些人认为这可以通过以下方式解决:

JFrame.setDefaultLookAndFeelDecorated(true);
Run Code Online (Sandbox Code Playgroud)

但他们误解了可能是指Java 7,因为我测试了它,结果是一样的.

我也尝试手动设置外观:

try {
    for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }

} catch [...] 
Run Code Online (Sandbox Code Playgroud)

将此与上面提出的解决方案相结合也行不通. …

java swing transparency jframe java-8

6
推荐指数
1
解决办法
2253
查看次数

如何设置JButton的按钮颜色(不是背景颜色)

我有一个JButton我想将背景颜色改为白色.使用金属外观时,我可以达到预期的效果setBackground:

金属外观和风格JButton与白色背景

不幸的是,使用Windows LAF时"背景颜色"的概念是不同的; 背景颜色是按钮周围绘制的颜色:

Windows外观风格的JButton,白色背景

我想使用Windows LAF,但允许将此按钮的颜色JButton更改为白色.我该怎么做呢?

java swing jbutton

5
推荐指数
1
解决办法
2万
查看次数

如何在java swing中为所有类型的组件设置UI?

我创建了自己的MyScrollbarUI类,在我的应用程序中有一个自定义滚动条外观.现在我必须这样做

scrollPane.getHorizontalScrollBar().setUI(new MyScrollbarUI());
scrollPane.getVerticalScrollBar().setUI(new MyScrollbarUI());
Run Code Online (Sandbox Code Playgroud)

ScrollPane我使用的任何.

是否有可能告诉Swing它应该MyScrollbarUI在任何滚动条上使用它.也许通过UIManager

java swing scrollbar custom-component

5
推荐指数
1
解决办法
6856
查看次数

是否可以为不同的组件设置不同的外观和感觉?

我在面板上有许多组件,我想对不同的组件应用不同的外观.可能吗?

java swing look-and-feel

5
推荐指数
2
解决办法
1060
查看次数

如何在Java中创建性感的用户界面

我计划开发一个允许管理客户端数据的桌面应用程序.我是一名经验丰富的Java程序员,但我从来没有真正能够在Java中使用有吸引力的界面,例如,我个人认为默认的Swing组件非常糟糕(当我将它与例如最近的Web界面进行比较时).

所以第一个问题是,如何在Java中创建性感的界面(仍在所有平台上运行)?其次,在HTML5中创建界面不是一个好主意吗?是不是可以在没有Web服务器的情况下运行HTML5接口,因为我不需要在线访问应用程序,因此我不需要服务器.

java user-interface swing swt

5
推荐指数
1
解决办法
3845
查看次数

为什么我的样板Java桌面应用程序JFrame在main方法中使用EventQueue.invokeLater?

我使用最新的Eclipse和GWT Designer来用Java创建swing应用程序.我的应用程序窗口中的主要功能(这是一个javax.swing.JFrame)在工具生成的auto中如下所示:

    /* launch the application */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                AppWindow window = new AppWindow();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这似乎是围绕着这可能是一个很大的噪音:

public static void main(String[] args) {
            try {
                AppWindow window = new AppWindow();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }


}
Run Code Online (Sandbox Code Playgroud)

我已经读过在某些情况下需要EventQueue.InvokeLater技术,另一个问题是在这里询问使用它的位置.

我的问题更简单; 为什么在代码生成器中会自动执行此操作?为什么main应该快速返回并让事件队列稍后创建应用程序窗口?难道不会阻止这一点吗?为什么JFrame自动生成的设计器会执行此EventQueue?我试图在启动和显示表单方面看到一些不同,无论这个代码是以更简单的方式还是更难的方式完成,我只能暂时断定这有一些好处,这些好处在初学者制作的小型演示应用程序中不可见像我一样,也许在现实世界的大型复杂Jframe类中,这种延迟/排队策略有一些好处吗?

java swing

4
推荐指数
1
解决办法
1237
查看次数