1

魅力的な Java アプリケーションを開発するためのフレームワークまたはツールはありますか?

たとえば、Mac OS の場合は次のようになります: http://appzapper.com/

ここに画像の説明を入力

Mac OS のルック アンド フィールである必要はありません。

4

2 に答える 2

6

機能するコードを作成するには、チュートリアルのDnDの概要を参照してください。


何がいいのかは、最初の投稿のスクリーンショットをご覧ください。

唯一のカスタム パーツは、下向き矢印の破線の境界線とその下のテキストです。JLabelそれを実現するために、テキストの HTML 形式でアイコン (矢印/境界線用) を使用できます。

例えば

ラベルに HTML 形式のテキストを含むアイコン

package test.t100.t006;

import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class DrawLabel {
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                // substitute for downward pointing arrow with dashed border
                Object obj = UIManager.getDefaults()
                        .get("OptionPane.warningIcon");
                if (obj!=null && obj instanceof Icon) {
                    Icon icon = (Icon)obj;
                    String text = "<html><body>Drag <em><b>Stuff</b></em> Here";
                    JLabel l = new JLabel(
                            text, icon, SwingConstants.HORIZONTAL);
                    l.setVerticalTextPosition(SwingConstants.BOTTOM);
                    l.setHorizontalTextPosition(SwingConstants.CENTER);
                    JOptionPane.showMessageDialog(
                            null, l);
                }
            }
        });
    }
}
于 2012-05-25T08:35:44.887 に答える
3

楽しむだけでスクリーンショットをお楽しみください:)

import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
public class DragHereIcon implements Icon {
  private int size = 80;
  private float a = 4f;
  private float b = 8f;
  private int r = 16;
  private int f = size/4;
  private Font font = new Font("Monospace", Font.PLAIN, size);
  private FontRenderContext frc = new FontRenderContext(null, true, true);
  private Shape s = new TextLayout("\u21E9", font, frc).getOutline(null);
  private Color linec = Color.GRAY;
  @Override public void paintIcon(Component c, Graphics g, int x, int y) {
    Graphics2D g2 = (Graphics2D)g.create();
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
    g2.translate(x, y);

    g2.setStroke(new BasicStroke(a));
    g2.setPaint(linec);
    g2.draw(new RoundRectangle2D.Float(a,a,size-2*a-1,size-2*a-1,r,r));

    g2.setStroke(new BasicStroke(b));
    g2.setColor(UIManager.getColor("Panel.background"));
    g2.drawLine(1*f,0*f,1*f,4*f);
    g2.drawLine(2*f,0*f,2*f,4*f);
    g2.drawLine(3*f,0*f,3*f,4*f);
    g2.drawLine(0*f,1*f,4*f,1*f);
    g2.drawLine(0*f,2*f,4*f,2*f);
    g2.drawLine(0*f,3*f,4*f,3*f);

    g2.setPaint(linec);
    Rectangle2D b = s.getBounds();
    Point2D.Double p = new Point2D.Double(
        b.getX() + b.getWidth()/2d, b.getY() + b.getHeight()/2d);
    AffineTransform toCenterAT = AffineTransform.getTranslateInstance(
        size/2d - p.getX(), size/2d - p.getY());
    g2.fill(toCenterAT.createTransformedShape(s));
    g2.translate(-x,-y);
    g2.dispose();
  }
  @Override public int getIconWidth()  {
    return size;
  }
  @Override public int getIconHeight() {
    return size;
  }
  public static JComponent makeUI() {
    JLabel label = new JLabel(new DragHereIcon());
    label.setText("<html>Drag <b>Stuff</b> Here");
    label.setVerticalTextPosition(SwingConstants.BOTTOM);
    label.setHorizontalTextPosition(SwingConstants.CENTER);
    label.setForeground(Color.GRAY);
    label.setFont(new Font("Monospace", Font.PLAIN, 24));
    JPanel p = new JPanel();
    p.add(label);
    p.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(DragHereIcon.makeUI());
    f.setSize(320, 200);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
于 2012-05-25T10:26:44.507 に答える