Someone else can probably help with the VF page, but to meet your minimum requirement we can avoid java all together and just use a custom button like below:
/{!Opportunity.Id}/e?clone=1&retURL=%2F{!Opportunity.Id}
and add &customField.Id=Value
for each field you want pre-populated.